*/
if (event->type == GDK_BUTTON_PRESS)
{
+ GtkCellRenderer *focus_cell;
+
if ((event->state & GDK_CONTROL_MASK) == GDK_CONTROL_MASK)
tree_view->priv->ctrl_pressed = TRUE;
if ((event->state & GDK_SHIFT_MASK) == GDK_SHIFT_MASK)
tree_view->priv->shift_pressed = TRUE;
+ focus_cell = _gtk_tree_view_column_get_cell_at_pos (column, event->x - background_area.x);
+ if (focus_cell)
+ gtk_tree_view_column_focus_cell (column, focus_cell);
+
if (event->state & GDK_CONTROL_MASK)
{
gtk_tree_view_real_set_cursor (tree_view, path, FALSE, TRUE);
return gtk_cell_area_get_edited_cell (priv->cell_area);
}
+GtkCellRenderer *
+_gtk_tree_view_column_get_cell_at_pos (GtkTreeViewColumn *column,
+ gint x)
+{
+ GList *list;
+ GList *cell;
+ GtkCellRenderer *match = NULL;
+ GtkTreeViewColumnPrivate *priv = column->priv;
+
+ list = gtk_cell_layout_get_cells (GTK_CELL_LAYOUT (column));
+ for (cell = list; cell; cell = cell->next)
+ {
+ GdkRectangle zero_cell_area = { 0, };
+ GdkRectangle allocation;
+
+ gtk_cell_area_get_cell_allocation (priv->cell_area,
+ priv->cell_area_context,
+ priv->tree_view,
+ cell->data,
+ &zero_cell_area,
+ &allocation);
+
+ if (allocation.x <= x && x <= allocation.x + allocation.width)
+ {
+ match = cell->data;
+ break;
+ }
+ }
+
+ g_list_free (list);
+
+ return match;
+}
+
/* Public Functions */